iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 7
1

create table的方式與其他資料庫的方式差異不大,建表時可以使用WITH來添加一些選項。
較常用到的大致是以下幾樣。

  1. CLUSTERING ORDER:
      依據clustering columns排序,以下圖為例所謂clustering columns指的就是
       Parmary key裡頭的added,video_id這兩個欄位。
    https://ithelp.ithome.com.tw/upload/images/20200909/20113220Efh9Js99dt.png
    資料的順序會先依據Partition Key,接著再以clustering columns排序,如果沒有特定宣告CLUSTERING ORDER則會以added ASC,video_id ASC排序。所以當你想要由新到舊的資料做排序可以在這邊宣告。
  2. compaction:
    Scylla資料的寫入順序是會先寫進memory table與commit log,直到memory table已經飽和才會將資料寫入檔案也就是SSTables,但是這會遇到一個問題,隨著SSTable的增加表示每次就要讀取更多的檔案,這時候compaction就派上用場。Scylla會依據compaction的策略來合併SSTable。
    https://ithelp.ithome.com.tw/upload/images/20200909/20113220tJ2x2ynass.png

預設的設定是SizeTieredCompactionStrategy,是依據資料表的大小分成幾個tier,如果tier 1達到4個SSTable,就會合併成tier 2的一個SSTable。這種方式利於資料庫類型屬於較頻繁的寫入,或著一旦寫入就幾乎不再做異動的資料。但因為同一個row有可能因為這樣的策略而分佈在多個SSTable導致在讀取的表現較差。不過目前在使用上還沒有遇到這個問題。


而另一種LeveledCompactionStrategy則是把SSTable分level,一開始由memtable寫入的SSTable分配到level 0,而每一層都會是上一層的10倍大,所以level 1會有10個,level 2會有100個SStable。這個策略會確保同一個row只會在同一層level的SSTable,並且最小化分散的SSTable,所以其表現在讀取的方面較佳。還有一種Time-windowCompactionStrategy,在此策略下,假如我們設定單位是一天,則當一天的時間結束,所有的SSTable會被合併成同一個。


上一篇
Day6 Architecture(二) - Create Keyspace
下一篇
Day8 Architecture(四) - Datacenter
系列文
ScyllaDB實作紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言